import { fileURLToPath } from "url";
import fs from "fs";

//暴露 返回查询到的控制器的所有js文件的方法
export function queryAllCtrls() {
  //获取可被浏览器解析的controllers目录的绝对路径
  const ctrlsPath = new URL("../controllers", import.meta.url).href;

  //将ctrls转换成绝对路径
  const ctrlsPath2 = fileURLToPath(ctrlsPath);
  // console.log(ctrlsPath2);

  //判断controllers目录是否存在
  if (fs.existsSync(ctrlsPath2)) {
    //获取该路径下的所有文件
    const allFiles = fs.readdirSync(ctrlsPath2);
    // console.log(allFiles);

    //获取所有文件(过滤js文件再拼接可被游览器的解析的上级目录路径)
    const allFilesJs = allFiles
      .filter((file) => file.endsWith("Controller.js"))
      .map((item) => `${ctrlsPath}/${item}`);
    // console.log(allFilesJs);

    return allFilesJs;
  }

  //目录不存在返回null
  return null;
}

//暴露 注册路由的方法
export function registerRouter(router, allCtrls) {
  //异步遍历 queryAllCtrls 的文件
  allCtrls.forEach(async (item) => {
    //拿到路由对象
    const { blogs } = await import(item);

    //遍历路由对象
    for (const blog in blogs) {
      //结构blog对象的属性拿到请求方法及路径
      const [reqMethod, reqPath] = blog.split(" ");

      //拿到请求所对应的方法
      const reqFn = await blogs[blog];
      //console.log(reqFn);

      //注册路由
      if (reqMethod === "GET") {
        router.get(reqPath, reqFn);
      }
      if (reqMethod === "POST") {
        router.post(reqPath, reqFn);
      }
      if (reqMethod === "PUT") {
        router.put(reqPath, reqFn);
      }
      if (reqMethod === "DELETE") {
        router.delete(reqPath, reqFn);
      }
    }
  });
}
